package com.allwees.bs.c.module.order.chain.create.handler;

import com.allwees.bs.c.module.order.chain.create.request.OrderCreateRequest;
import com.allwees.bs.c.module.order.chain.create.request.OrderItemCreateRequest;
import com.allwees.bs.c.module.order.entity.OrderSkuSnapEntity;
import com.allwees.bs.c.module.order.repository.OrderSkuSnapRepository;
import com.allwees.core.common.context.AbstractHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class OrderSkuSnapSaveHandler extends AbstractHandler<OrderCreateRequest> {

    @Autowired
    private OrderSkuSnapRepository orderSkuSnapRepository;

    @Override
    public OrderCreateRequest handler(OrderCreateRequest request) {
        if(request.isCheckOrder()){
            return request;
        }
        saveOrderSkuSnap(request);

       return doNext(request);
    }

    private void saveOrderSkuSnap(OrderCreateRequest request) {
        List<OrderSkuSnapEntity> orderSkuSnaps = new ArrayList<>();
        for (OrderItemCreateRequest item : request.getItems()) {
            orderSkuSnaps.add(toOrderSkuSnap(request.getUuid(),request.getUserUuid(), item));
        }
        orderSkuSnapRepository.saveAll(orderSkuSnaps);
    }

    public OrderSkuSnapEntity toOrderSkuSnap(String orderUuid,String userUuid, OrderItemCreateRequest item) {
        OrderSkuSnapEntity orderSkuSnap = new OrderSkuSnapEntity();
        orderSkuSnap.setUserUuid(userUuid);
        orderSkuSnap.setOrderItemUuid(item.getUuid());
        orderSkuSnap.setOrderUuid(orderUuid);

        orderSkuSnap.setSupplierUuid(item.getSupplierUuid());
        orderSkuSnap.setRetailerUuid(item.getRetailerUuid());
        orderSkuSnap.setStoreUuid(item.getStoreUuid());

        orderSkuSnap.setProductUuid(item.getProductUuid());
        orderSkuSnap.setProductNo(item.getProductNo());
        orderSkuSnap.setProductName(item.getProductName());
        orderSkuSnap.setFreeGiftProd(item.isFreeGift());
        orderSkuSnap.setMarketingType(item.isFreeGift() ? 2: null);
        orderSkuSnap.setProductPhoto(item.getProductPhoto());
        orderSkuSnap.setProductDesc(item.getProductDesc());
        orderSkuSnap.setCategoryNo(item.getCategoryNo());
        orderSkuSnap.setProductShippingArrivalDesc(item.getProductShippingArrivalDesc());

        orderSkuSnap.setSkuUuid(item.getSkuUuid());
        orderSkuSnap.setSkuNo(item.getSkuNo());
        orderSkuSnap.setPhotosStr(item.getPhotosStr());
        orderSkuSnap.setSkuColor(item.getSkuColor());
        orderSkuSnap.setSkuSize(item.getSkuSize());

        orderSkuSnap.setPrice(item.getPrice());
        orderSkuSnap.setSkuOriginPrice(item.getOriginalPrice());
        //orderSkuSnap.setSkuRetailPrice(item.getRetailerPrice());
        orderSkuSnap.setSkuRetailPrice(item.getProductAmtSkuAfterAdd());
        //orderSkuSnap.setSkuShippingPrice(item.getSupplyPrice());
        orderSkuSnap.setSkuShippingPrice(item.getOriginalAmtShippingSku());
        //sku加价后订单实付总金额(商品实付+运费实付)
        orderSkuSnap.setSkuAmtAfterAdd(item.getAmt());
        //sku加价后商品实付
        orderSkuSnap.setSkuAmtProductAfterAdd(item.getAmtSku());
        //sku加价后运费
        orderSkuSnap.setSkuShippingPriceAfterAdd(item.getAmtShipping());
        //sku加价后税费
        orderSkuSnap.setAmtSaleTaxSkuAfterAdd(item.getAmtSaleTax());
        orderSkuSnap.setOriginalAmtSaleTaxSku(item.getOriginalAmtSaleTaxSku());
        orderSkuSnap.setQuantity(item.getQuantity());

        orderSkuSnap.setSkuShippingCurrency(item.getSkuShippingCurrency());
        orderSkuSnap.setCurrency(item.getCurrency());

        return orderSkuSnap;
    }
}
